package 代码coding题OR模拟题;

public class leetocde606傻逼描述题 {
	
	public static void main(String []args) {
		TreeNode root  = new TreeNode(1);
//		root
		root.left  = new TreeNode(2);
		root.right  = new TreeNode(3);
		root.left.right  = new TreeNode(4);
		solution(root);
		System.out.println(str);
	
	}
	static StringBuilder str = new StringBuilder();
	public static void solution(TreeNode node) {
		if(node == null ) {
			return ;
		}
		str.append(node.val);
		if(node.left == null && node.right != null) {
			str.append("()");
		}
		else if(!(node.left ==null &&node.right ==null)){
			str.append("(");
			solution(node.left);
			str.append(")");
		}
		if(node.right !=null) {
			str.append("(");
			solution(node.right);
			str.append(")");
		}
		
		
	}
	//  这是一个 coding 问题 就是 减少代码的重复 情况   
	public static void solution1(TreeNode node) {
		if(node == null ) {
			return ;
		}
		str.append(node.val);
//		  这就 考虑 那些情况            这道题说人话就是：只允许左子树为空时用()替代节点，如果右子树为空或者左右子树都为空就不要瞎折腾了
	    if(node.left !=null  || node.right != null) {
//	    	  如果 左节点 为空 进入 这个 if语句的执行 必是 右节点 ！=null 那么的话 下面这三行代码 相当于 直接 加了一个  () 对吧
	    	str.append("(");
			solution(node.left);
			str.append(")");
	    }
		if(node.right !=null) {
			str.append("(");
			solution(node.right);
			str.append(")");
		}
		
		
	}

	
	

}
 class TreeNode {
     int val;
     TreeNode left;
     TreeNode right;
     TreeNode() {}
     TreeNode(int val) { this.val = val; }
     TreeNode(int val, TreeNode left, TreeNode right) {
         this.val = val;
         this.left = left;
         this.right = right;
     }
 }